﻿using Bettzueche.Dampfross;
using Bettzueche.RLLibrary.Types;

namespace Bettzueche.Dampfross
{
    /// <summary>
    /// RL-Zustand. Beinhaltet benachbarte Kacheln, Zielrichtung, (Zielentfernung?).
    /// </summary>
    public class Umgebung : /*IEnumerable<Kacheltyp>,*/ IState
    {
        /// <summary>
        /// Nachbarfelder. Sortiert von NordOst gegen Uhrzeigersinn bis SüdOst. Auch Durchlauf dieses Enumerators
        /// </summary>
        public readonly Kachel[] Nachbarn;
        public static readonly int NO_Idx = 0;
        public static readonly int N_Idx =  1;
        public static readonly int NW_Idx = 2;
        public static readonly int SW_Idx = 3;
        public static readonly int S_Idx =  4;
        public static readonly int SO_Idx = 5;
        public readonly Kachel ZentrumFeld;
        // Vector _zielRichtung;
        public HexRichtungen RichtungZiel {
            get;
            private set;
        }

        public int Entfernung {
            get;
            private set;
        }

        


        public Umgebung(Kachel zentrum, HexRichtungen zielRichtung, int entfernung, Kachel[] nachbarn) {
            ZentrumFeld = zentrum;
            RichtungZiel = zielRichtung;
            Entfernung = entfernung;
            Nachbarn = nachbarn;
        }




        ///// <summary>
        ///// Returns an enumerator that iterates through the collection.<para>
        ///// Durchläuft die Umgebungsfelder von NordOst im Uhrzeigersinn bis SüdOst</para>
        ///// </summary>
        ///// <returns>
        ///// A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the collection.
        ///// </returns>
        //public IEnumerator<Kacheltyp> GetEnumerator() {
        //    for (int i = 0; i < Nachbarn.Length; i++) {
        //        yield return Nachbarn[i].Content.Typ;
        //    }
        //}

        //System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
        //    throw new NotImplementedException();
        //}
    }
}
